Technical Q&A QA1124
Maintaining sessions in Java Applets on Mac OS X


Q: éÑÇÃÉAÉvÉåÉbÉgÇÕÅAÉfÅ[É^Çï€éùÇ∑ÇÈÇΩÇflÇ…ÉTÅ[ÉoÅ[ë§Ç≈ÉNÉâÉCÉAÉìÉgÇà HttpSession ÇégǡǃÅAJSP/servlet Ç÷Çà URLConnection ê⁄ë±ÇäJÇ´ÉfÅ[É^ÇÃéÛÇØìnǵÇǵNjÇ∑ÅBǵǩǵǪÇÃå„LJÅAÉAÉvÉåÉbÉgÇÕê⁄ë±ÇçsǧÇΩÇ—Ç…ÉTÅ[ÉoÅ[ÇΔêVǵǢÉZÉbÉVÉáÉìÇê∂ê¨ÇµÅAÉfÅ[É^Ç™é∏ÇÌÇÍÇ‹Ç∑ÅBDZÇÃÇÊǧǻDZÇΔÇÕÅAWindows Ç‹ÇΩÇÕ Mac OS 9 Ç≈ÇÕãNDZÇËÇ‹ÇπÇÒÅBâΩÇ™ñ‚ëËÇ»ÇÃÇ≈ǵÇÂǧǩÅHÉäÉXÉg 1 ÇÕä»íPÇ» JSP ÇÃó·Çé¶ÇµÇ‹Ç∑ÅB

A: Mac OS X è„Ç≈ÇÕ Java ÉAÉvÉåÉbÉgÇÕÅA Java ÉAÉvÉåÉbÉgÇ™ñÑÇflçûÇ‹ÇÍǃǢÇÈÉuÉâÉEÉUÇΔÇÕÉNÉbÉLÅ[Çã§óLǵNjÇπÇÒÅBDZÇÃÇΩÇflÅAÉAÉvÉåÉbÉgÇΔÉuÉâÉEÉUÇÃÉZÉbÉVÉáÉìÇÕï Ç…Ç»ÇËÇ‹Ç∑ÅBDZÇÍÇÕÅAWeb ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃÇÕñ‚ëËÇ…Ç»ÇÈèÍçáǙdžÇËÇ‹Ç∑ÅB âåàçÙÇÕÅAÇΩÇΔǶnj HttpServletResponse.encodeURL() ÉÅÉ\ÉbÉhÇégópǵǃÅAÉAÉvÉåÉbÉgÇñÑÇflçûÇÒÇ≈Ç¢ÇÈÉuÉâÉEÉUÇ…ÉRÉìÉeÉìÉcÇìnÇ∑ÇΔÇ´Ç… URL Ç servlet/JSP/ ǻǫÇégǡǃèëÇ´ä∑ǶÇÈDZÇΔÇ≈Ç∑ÅB



<%
    HttpSession session1 = request.getSession(true);
%>
<HTML>
    <BODY>
    Browser's Session is <%= session1.getId() %><BR>
<%-- APPLET É^ÉOÇèëÇ´èoÇ∑ --%> <APPLET CODEBASE="." CODE="TestApplet.class" WIDTH="500" HEIGHT="500"> <PARAM NAME="appName" VALUE="TestApplet"> <%-- ÉZÉbÉVÉáÉìÇÉGÉìÉRÅ[ÉhǵǃñÑÇflçûÇÒÇæí êMóp URL ÇëóêMÇ∑ÇÈ --%> <PARAM NAME="serverURL" VALUE="<%= response.encodeURL("serverIO.jsp") %>"> </APPLET> </BODY> </HTML>

ÉäÉXÉg 1Å@ÉZÉbÉVÉáÉìÇÉGÉìÉRÅ[ÉhǵǃñÑÇflçûÇÒÇæ URL ÇÉAÉvÉåÉbÉgÇ…ëóêM



è„ãLÇÃÉRÅ[ÉhÇÕÅAÉuÉâÉEÉUÇà ÉTÅ[ÉoÇΔÇÃÉZÉbÉVÉáÉìÇÅAÉAÉvÉåÉbÉgÇ™ÉTÅ[ÉoÇΔÇÃí êMÇ…ïKóvÇΔÇ∑ÇÈ URL Ç…ÉGÉìÉRÅ[ÉhǵǃñÑÇflçûǛNjÇ∑ÅB ǪÇÃå„ÅAÉAÉvÉåÉbÉgÇÕÅAÉGÉìÉRÅ[ÉhÇ≥ÇÍÇΩ URL ÇÉpÉâÉÅÅ[É^ÇΔǵǃéÛÇØéÊÇËÅAǪÇÍÇégǡǃêVǵǢÅAÉZÉbÉVÉáÉìÇäÓDžǵÇΩ URLConnection Çê∂ê¨Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉäÉXÉg 2 ÇÕÅAǪÇÃÇΔÇ´ÇÃÉRÅ[ÉhÇé¶ÇµÇ‹Ç∑ÅB



    String ioData = "gkj3609&fj2*^bl#d?em";
    String param = "redirect";
// ÉTÅ[ÉoÇ™íÒãüÇ∑ÇÈÉZÉbÉVÉáÉìèÓïÒÇégǡǃ ÉAÉvÉåÉbÉgÇà serverURL ÇΔǢǧÉpÉâÉÅÅ[É^ÇéÊìæÇ∑ÇÈ StringBuffer serverURL = new StringBuffer(getParameter("serverURL"));
// ÉTÅ[Éoí êMópÇà URL ÉpÉâÉÅÅ[É^Çí«â¡Ç∑ÇÈ serverURL.append("?IOdata=").append(URLEncoder.encode(ioData)); serverURL.append("&param=").append(URLEncoder.encode(param));
// ç≈èIìIÇ» URL ÇçÏê¨Çµê⁄ë±Ç∑ÇÈ URL toGo = new URL(getDocumentBase(), serverURL.toString()); URLConnection conn = toGo.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); do { console.append(br.readLine()); console.append("\n"); } while (br.readLine() != null);

ÉäÉXÉg 2Å@èëÇ´ä∑ǶÇÁÇÍÇΩ URL Ç…äÓÇ√Ǣǃ URLConnection Çç\íz



ÉZÉbÉVÉáÉìÇÕÅAWeb ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ÷ÇÃÉGÉìÉgÉäÅEÉ|ÉCÉìÉgÇ©ÇÁénÇ‹ÇÈÅAURL Ç…ÉGÉìÉRÅ[ÉhǵǃñÑÇflçûÇfiDZÇΔÇ™èdóvÇ≈Ç∑ÅBǬNjÇËÅAÉAÉvÉåÉbÉgÇ™ÅAAppStart.jsp ÇΔǢǧ JSP ÉyÅ[ÉWÇ…ä‹Ç‹ÇÍǃǢÇÈèÍçáÅAAppStart.jsp Ç÷ÇÃÇ∑Ç◊ǃÇÃÉäÉìÉNÇÅAè„ãLÇÃåƒÇ—èoǵÇégǡǃÅAURL Ç…ÉGÉìÉRÅ[ÉhǵǃñÑÇflçûÇ‹Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉZÉbÉVÉáÉìÇ™ URL Ç…ÉGÉìÉRÅ[ÉhǵǃñÑÇflçûÇ‹ÇÍǃǢǻǢèÛë‘Ç≈ÅAÉÜÅ[ÉUÇ™ÅAäJénÉyÅ[ÉWÇ…à⁄ìÆÇµÇΩèÍçáÅAÉAÉvÉåÉbÉgÇ™í êMÇäJénǵÇΩå„Ç…ÉyÅ[ÉWÇÉäÉtÉåÉbÉVÉÖÇ∑ÇÈÇΔÅAÉZÉbÉVÉáÉìèÓïÒÇ™é∏ÇÌÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB

DZÇÃâÒîï˚ñ@Çê≥ǵÇ≠ìÆçÏÇ≥ÇπÇÈÇ…ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÅ[ÉoÇ≈ÇÃÉNÉbÉLÅ[ÇÃåüèoÇñ≥å¯Ç…Ç∑ÇÈïKóvǙdžÇÈÇ≈ǵÇÂǧÅBÇ»Ç∫Ç»ÇÁÅAÇ«Çà response.encodeURL() Ç÷ÇÃåƒÇ—èoǵDžǮǢǃLJÅAÇŸÇΔÇÒÇ«Çà J2EE ÉAÉvÉäÉPÅ[ÉVÉáÉìÉTÅ[ÉoÇÕÅAÉNÉâÉCÉAÉìÉgë§Ç…ÉZÉbÉVÉáÉìÇï\Ç∑ÉAÉNÉeÉBÉuÇ»ÉNÉbÉLÅ[ǙǻǢèÍçáÇ…ÇÃÇ›ÅAURL ÇÃÉGÉìÉRÅ[ÉhÇçsǧǩÇÁÇ≈Ç∑ÅBǵÇΩǙǡǃÅAÉuÉâÉEÉUÇ™ÉZÉbÉVÉáÉìÇÃÉNÉbÉLÅ[ÇçÏê¨ÇµÇΩèÍçáÅAÉTÅ[ÉoÇÕÅAïKóvǙǻǢÇΔîªífǵ URL Ç…ÉZÉbÉVÉáÉìÇÉGÉìÉRÅ[ÉhǵñÑÇflçûÇfiÇÃÇé~ÇflÇ‹Ç∑ÅBǵÇΩǙǡǃǪÇÃâåàçÙÇÕÅAURL Ç™ïKÇ∏ÉGÉìÉRÅ[ÉhÇ≥ÇÍÇÈÇÊǧDžÅAÉTÅ[ÉoÇÃÉNÉbÉLÅ[Çñ≥å¯Ç…Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBÉNÉbÉLÅ[ÇégópǵǃǢÇΩÉXÉeÅ[ÉgÉtÉãÇ» Web ÉAÉvÉäÉPÅ[ÉVÉáÉìǙDZÇÃï˚ñ@Ç…ÇÊÇÈâeãøÇéÛÇØÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÅBURL ÇÃèëÇ´ä∑ǶÇÕÉNÉâÉCÉAÉìÉgÇÃÉNÉbÉLÅ[ÇΔNjǡÇΩÇ≠ìØÇ∂ÇÊǧDžã@î\ǵâië±ìIÇ≈Ç∑ÅB


[2002 îN 5 åé 14 ì˙]